"""
main.py 系统主界面
"""
from model import FormattedMessage

class SysCli:

    def __init__(self):
        # 初始化函数，定义系统功能列表和格式化消息对象
        self.fun = [self.sys_help,
                    self.get_formatted_message,
                    self.add_formatted_message,
                    self.update_formatted_message,
                    self.del_formatted_message,
                    exit
                    ]
        self.fm = FormattedMessage()

    def run(self):
        """
        系统入口函数，显示主菜单，并执行相应操作
        """
        while True:
            t = self.main_menu()
            self.fun[t]()

    @staticmethod
    def main_menu():
        """
        显示系统主菜单，并获取用户合法输入
        """
        print('-------------------------')
        print('1.查询格式化消息')
        print('2.添加格式化消息')
        print('3.修改格式化消息')
        print('4.删除格式化消息')
        print('5.退出')
        try:
            c = int(input('请选择（1-5）：'))
            if 1 <= c <= 5:
                return c
            else:
                # 输入非法，将显示帮助信息
                return 0
        except ValueError:
            return 0

    @staticmethod
    def sys_help():
        """
        系统帮助信息
        """
        print('请选择序号，并根据提示进行输入！')

    def add_formatted_message(self):
        """
        添加格式化消息
        """
        t = {}
        for h in self.fm.header:
            if h != 'id':
                t[h] = input('请输入{h}:'.format(h=h))
        self.fm.add_one(**t)

    def get_formatted_message(self):
        """
        查找并打印当前保存的格式化消息
        """
        print(' '.join(self.fm.header))
        for d in self.fm.get_all():
            for k in self.fm.header:
                print(d[k], ' ', end='')
            print()
        print('查询到%i条记录' % self.fm.count())

    def update_formatted_message(self):
        """
        根据选择，更新格式化消息
        """
        self.get_formatted_message()
        rid = int(input('请选择要更新的id（输入不存在id将不会更新）:'))
        t = {}
        for h in self.fm.header:
            if h != 'id':
                t[h] = input('请输入{h}:'.format(h=h))
        self.fm.set({'id': str(rid)}, **t)

    def del_formatted_message(self):
        """
        根据选择，删除对应的格式化消息
        """
        self.get_formatted_message()
        rid = int(input('请选择要删除的id（输入不存在id将不会删除）:'))
        self.fm.delete({'id': str(rid)})


if __name__ == '__main__':
    app = SysCli()
    app.run()
